package com.briup.common.response;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 统一维护响应结果状态码以及响应消息的关系，
 * 主要是维护对于程序中可能存在的业务的失败原因描述
 */
@Getter
@RequiredArgsConstructor
public enum ResultCode {

    // 成功的响应
    SUCCESS(200, "操作成功"),

    // 业务原因导致的失败
    // 参数相关的异常
    PARAMETER_IS_INVALID(10001, "该参数不合法"),
    PARAMETER_IS_BLANK(10002, "该参数不能为空"),
    BEAN_CONVERT_ERROR(10003, "对象转换异常"),

    // 用户方面业务的问题
    USER_IS_NOT_EXISTS(20001, "该用户不存在"),
    USERNAME_IS_BLACK(20002, "用户名不能为空"),
    PASSWORD_IS_BLACK(20003, "密码不能为空"),
    USER_IS_EXISTS(20004, "该用户已经存在"),
    TOKEN_IS_TIMEOUT(20005, "当前登录状态已超时，请重新登录"),
    TOKEN_IS_INVALID(20006, "当前登录状态不合法，请重新登录"),
    TOKEN_IS_MISSING(20007, "当前未登录，请前往登录"),
    USER_STATUS_IS_FORBIDDEN(20008, "当前用户状态不可用，请联系管理员处理！"),
    PASSWORD_IS_ERROR(20009, "密码输入有误，请检查后重新输入"),
    CAPTCHA_EXPIRED(20010, "验证码已过期，请重新获取"),
    CAPTCHA_ERROR(20011, "验证码输入有误，请检查后重新输入"),
    // 权限方面的问题
    NO_PERMISSION(20012, "您没有访问本接口的权限"),
    OLD_PASSWORD_IS_ERROR(20013, "旧密码输入有误，密码修改失败"),

    // 角色相关方面问题
    ROLE_IS_NOT_EXISTS(30001, "该id对应的角色不存在"),
    ROLE_IS_EXISTS(30002, "该角色已经存在"),

    // 菜单相关方面问题
    MENU_ALREADY_EXISTS(40001, "该菜单已经存在"),
    MENU_IS_NOT_EXISTS(40002, "该菜单不存在"),
    MENU_TYPE_ERROR(40003, "按钮类型的菜单不能有子菜单"),
    MENU_TYPE_IS_NOT_SUPPORT(40004, "菜单类型不支持修改"),
    MENU_PARENT_ID_ERROR(40005, "交换位置的菜单必须在同一个父目录下"),
    MENU_HAS_CHILDREN(40006, "该菜单下存在子菜单或按钮，不能删除"),
    MENU_PARENT_IS_NOT_EXISTS(40007, "该父菜单不存在"),

    // 实验室相关方面问题
    LABS_IS_NOT_EXISTS(50001, "该实验室不存在"),
    USER_HAS_ASSIGNED_LABS(50002, "该用户已经关联了其他实验室，不能重复关联"),

    // 设备相关方面问题
    DEVICE_IS_NOT_EXISTS(600001, "该设备不存在"),
    DEVICE_NAME_EXISTS(600002, "该设备名称已经存在"),
    DEVICE_TYPE_IS_NOT_EXISTS(600003, "该设备类型不存在"),

    // 预约相关方面问题
    LABS_RENTAL_TIME_NOT_FOUND(700001, "该预约时间段不存在"),
    LABS_RENTAL_TIME_ALREADY_EXISTS(700002, "该实验室的该预约时间段已经存在"),
    LABS_RENTAL_TIME_OVERLAP(700003, "该实验室的该预约时间段与其他预约时间段重叠"),
    LABS_RENTAL_TIME_NOT_AVAILABLE(700004, "该实验室的该预约时间段已超过可预约时间"),
    LABS_RENTAL_IS_NOT_EXISTS(700005, "该实验室的该预约不存在"),

    INNER_SERVER_ERROR(500, "服务器内部异常，请联系管理员处理");

    private final int code;
    private final String message;
}
